#ifndef QUERY_H
#define QUERY_H
#include<iostream>
using std::string;
#include<memory>
using std::shared_ptr;

class Query_base;
class TextQuery;
class QueryResult;
class Query{
    //在Query中使用~操作符构造NotQuery
    friend Query operator~(const Query &);
    //在Query中使用|操作符构造OrQuery
    friend Query operator| (const Query&, const Query&);
    //在Query中使用&操作符构造AndQuery
    friend Query operator& (const Query&, const Query&);

    public:
        // 构建一个新的WordQuery
        Query(const string &s);
        // 接口函数: 调用对应的Query_base操作
        QueryResult eval(const TextQuery &) const;
        string rep() const;
    private:
        Query(shared_ptr<Query_base>);
        shared_ptr<Query_base> q;
};

#endif // QUERY_H